﻿/*
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
(function () {
    function r() {
        return !1
    }

    var n = CKEDITOR.tools, B = CKEDITOR.plugins.pastetools, t = B.filters.common, k = t.styles,
        C = t.createAttributeStack, z = t.lists.getElementIndentation, D = ["o:p", "xml", "script", "meta", "link"],
        E = "v:arc v:curve v:line v:oval v:polyline v:rect v:roundrect v:group".split(" "), A = {}, y = 0, q = {}, g, p;
    CKEDITOR.plugins.pastetools.filters.word = q;
    CKEDITOR.plugins.pastefromword = q;
    q.rules = function (c, b, d) {
        function e(a) {
            (a.attributes["o:gfxdata"] || "v:group" === a.parent.name) && l.push(a.attributes.id)
        }

        var f = Boolean(c.match(/mso-list:\s*l\d+\s+level\d+\s+lfo\d+/)), l = [], w = {
            root: function (a) {
                a.filterChildren(d);
                CKEDITOR.plugins.pastefromword.lists.cleanup(g.createLists(a))
            },
            elementNames: [[/^\?xml:namespace$/, ""], [/^v:shapetype/, ""], [new RegExp(D.join("|")), ""]],
            elements: {
                a: function (a) {
                    if (a.attributes.name) {
                        if ("_GoBack" == a.attributes.name) {
                            delete a.name;
                            return
                        }
                        if (a.attributes.name.match(/^OLE_LINK\d+$/)) {
                            delete a.name;
                            return
                        }
                    }
                    if (a.attributes.href && a.attributes.href.match(/#.+$/)) {
                        var b = a.attributes.href.match(/#(.+)$/)[1];
                        A[b] = a
                    }
                    a.attributes.name && A[a.attributes.name] && (a = A[a.attributes.name], a.attributes.href = a.attributes.href.replace(/.*#(.*)$/, "#$1"))
                }, div: function (a) {
                    if (b.plugins.pagebreak && a.attributes["data-cke-pagebreak"]) return a;
                    k.createStyleStack(a, d, b)
                }, img: function (a) {
                    if (a.parent && a.parent.attributes) {
                        var b = a.parent.attributes;
                        (b = b.style || b.STYLE) && b.match(/mso\-list:\s?Ignore/) && (a.attributes["cke-ignored"] = !0)
                    }
                    k.mapCommonStyles(a);
                    a.attributes.src && a.attributes.src.match(/^file:\/\//) && a.attributes.alt &&
                    a.attributes.alt.match(/^https?:\/\//) && (a.attributes.src = a.attributes.alt);
                    a = a.attributes["v:shapes"] ? a.attributes["v:shapes"].split(" ") : [];
                    b = CKEDITOR.tools.array.every(a, function (a) {
                        return -1 < l.indexOf(a)
                    });
                    if (a.length && b) return !1
                }, p: function (a) {
                    a.filterChildren(d);
                    if (a.attributes.style && a.attributes.style.match(/display:\s*none/i)) return !1;
                    if (g.thisIsAListItem(b, a)) p.isEdgeListItem(b, a) && p.cleanupEdgeListItem(a), g.convertToFakeListItem(b, a), n.array.reduce(a.children, function (a, b) {
                        "p" === b.name &&
                        (0 < a && (new CKEDITOR.htmlParser.element("br")).insertBefore(b), b.replaceWithChildren(), a += 1);
                        return a
                    }, 0); else {
                        var c = a.getAscendant(function (a) {
                            return "ul" == a.name || "ol" == a.name
                        }), f = n.parseCssText(a.attributes.style);
                        c && !c.attributes["cke-list-level"] && f["mso-list"] && f["mso-list"].match(/level/) && (c.attributes["cke-list-level"] = f["mso-list"].match(/level(\d+)/)[1]);
                        b.config.enterMode == CKEDITOR.ENTER_BR && (delete a.name, a.add(new CKEDITOR.htmlParser.element("br")))
                    }
                    k.createStyleStack(a, d, b)
                }, pre: function (a) {
                    g.thisIsAListItem(b,
                        a) && g.convertToFakeListItem(b, a);
                    k.createStyleStack(a, d, b)
                }, h1: function (a) {
                    g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
                    k.createStyleStack(a, d, b)
                }, h2: function (a) {
                    g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
                    k.createStyleStack(a, d, b)
                }, h3: function (a) {
                    g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
                    k.createStyleStack(a, d, b)
                }, h4: function (a) {
                    g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
                    k.createStyleStack(a, d, b)
                }, h5: function (a) {
                    g.thisIsAListItem(b, a) && g.convertToFakeListItem(b,
                        a);
                    k.createStyleStack(a, d, b)
                }, h6: function (a) {
                    g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
                    k.createStyleStack(a, d, b)
                }, font: function (a) {
                    if (a.getHtml().match(/^\s*$/)) return a.parent.type === CKEDITOR.NODE_ELEMENT && (new CKEDITOR.htmlParser.text(" ")).insertAfter(a), !1;
                    b && !0 === b.config.pasteFromWordRemoveFontStyles && a.attributes.size && delete a.attributes.size;
                    CKEDITOR.dtd.tr[a.parent.name] && CKEDITOR.tools.arrayCompare(CKEDITOR.tools.object.keys(a.attributes), ["class", "style"]) ? k.createStyleStack(a,
                        d, b) : C(a, d)
                }, ul: function (a) {
                    if (f) return "li" == a.parent.name && 0 === n.indexOf(a.parent.children, a) && k.setStyle(a.parent, "list-style-type", "none"), g.dissolveList(a), !1
                }, li: function (a) {
                    p.correctLevelShift(a);
                    f && (a.attributes.style = k.normalizedStyles(a, b), k.pushStylesLower(a))
                }, ol: function (a) {
                    if (f) return "li" == a.parent.name && 0 === n.indexOf(a.parent.children, a) && k.setStyle(a.parent, "list-style-type", "none"), g.dissolveList(a), !1
                }, span: function (a) {
                    a.filterChildren(d);
                    a.attributes.style = k.normalizedStyles(a, b);
                    if (!a.attributes.style || a.attributes.style.match(/^mso\-bookmark:OLE_LINK\d+$/) || a.getHtml().match(/^(\s|&nbsp;)+$/)) return t.elements.replaceWithChildren(a), !1;
                    a.attributes.style.match(/FONT-FAMILY:\s*Symbol/i) && a.forEach(function (a) {
                        a.value = a.value.replace(/&nbsp;/g, "")
                    }, CKEDITOR.NODE_TEXT, !0);
                    k.createStyleStack(a, d, b)
                }, "v:imagedata": r, "v:shape": function (a) {
                    var b = !1;
                    if (null === a.getFirst("v:imagedata")) e(a); else {
                        a.parent.find(function (c) {
                            "img" == c.name && c.attributes && c.attributes["v:shapes"] == a.attributes.id &&
                            (b = !0)
                        }, !0);
                        if (b) return !1;
                        var c = "";
                        "v:group" === a.parent.name ? e(a) : (a.forEach(function (a) {
                            a.attributes && a.attributes.src && (c = a.attributes.src)
                        }, CKEDITOR.NODE_ELEMENT, !0), a.filterChildren(d), a.name = "img", a.attributes.src = a.attributes.src || c, delete a.attributes.type)
                    }
                }, style: function () {
                    return !1
                }, object: function (a) {
                    return !(!a.attributes || !a.attributes.data)
                }, br: function (a) {
                    if (b.plugins.pagebreak && (a = n.parseCssText(a.attributes.style, !0), "always" === a["page-break-before"] || "page" === a["break-before"])) return a =
                        CKEDITOR.plugins.pagebreak.createElement(b), CKEDITOR.htmlParser.fragment.fromHtml(a.getOuterHtml()).children[0]
                }
            },
            attributes: {
                style: function (a, c) {
                    return k.normalizedStyles(c, b) || !1
                }, "class": function (a) {
                    a = a.replace(/(el\d+)|(font\d+)|msonormal|msolistparagraph\w*/ig, "");
                    return "" === a ? !1 : a
                }, cellspacing: r, cellpadding: r, border: r, "v:shapes": r, "o:spid": r
            },
            comment: function (a) {
                a.match(/\[if.* supportFields.*\]/) && y++;
                "[endif]" == a && (y = 0 < y ? y - 1 : 0);
                return !1
            },
            text: function (a, b) {
                if (y) return "";
                var c = b.parent && b.parent.parent;
                return c && c.attributes && c.attributes.style && c.attributes.style.match(/mso-list:\s*ignore/i) ? a.replace(/&nbsp;/g, "") : a
            }
        };
        n.array.forEach(E, function (a) {
            w.elements[a] = e
        });
        return w
    };
    q.lists = {
        thisIsAListItem: function (c, b) {
            //return p.isEdgeListItem(c, b) || b.attributes.style && b.attributes.style.match(/mso\-list:\s?l\d/) && "li" !== b.parent.name || b.attributes["cke-dissolved"] || b.getHtml().match(/<!\-\-\[if !supportLists]\-\->/) ? !0 : !1
            return !1
        }, convertToFakeListItem: function (c, b) {
            p.isDegenerateListItem(c, b) && p.assignListLevels(c,
                b);
            this.getListItemInfo(b);
            if (!b.attributes["cke-dissolved"]) {
                var d;
                b.forEach(function (b) {
                    !d && "img" == b.name && b.attributes["cke-ignored"] && "*" == b.attributes.alt && (d = "·", b.remove())
                }, CKEDITOR.NODE_ELEMENT);
                b.forEach(function (b) {
                    d || b.value.match(/^ /) || (d = b.value)
                }, CKEDITOR.NODE_TEXT);
                if ("undefined" == typeof d) return;
                b.attributes["cke-symbol"] = d.replace(/(?: |&nbsp;).*$/, "");
                g.removeSymbolText(b)
            }
            var e = b.attributes && n.parseCssText(b.attributes.style);
            if (e["margin-left"]) {
                var f = e["margin-left"], l = b.attributes["cke-list-level"];
                (f = Math.max(CKEDITOR.tools.convertToPx(f) - 40 * l, 0)) ? e["margin-left"] = f + "px" : delete e["margin-left"];
                b.attributes.style = CKEDITOR.tools.writeCssText(e)
            }
            b.name = "cke:li"
        }, convertToRealListItems: function (c) {
            var b = [];
            c.forEach(function (c) {
                "cke:li" == c.name && (c.name = "li", b.push(c))
            }, CKEDITOR.NODE_ELEMENT, !1);
            return b
        }, removeSymbolText: function (c) {
            var b = c.attributes["cke-symbol"], d = c.findOne(function (c) {
                return c.value && -1 < c.value.indexOf(b)
            }, !0), e;
            d && (d.value = d.value.replace(b, ""), e = d.parent, e.getHtml().match(/^(\s|&nbsp;)*$/) &&
            e !== c ? e.remove() : d.value || d.remove())
        }, setListSymbol: function (c, b, d) {
            d = d || 1;
            var e = n.parseCssText(c.attributes.style);
            if ("ol" == c.name) {
                if (c.attributes.type || e["list-style-type"]) return;
                var f = {
                    "[ivx]": "lower-roman",
                    "[IVX]": "upper-roman",
                    "[a-z]": "lower-alpha",
                    "[A-Z]": "upper-alpha",
                    "\\d": "decimal"
                }, l;
                for (l in f) if (g.getSubsectionSymbol(b).match(new RegExp(l))) {
                    e["list-style-type"] = f[l];
                    break
                }
                c.attributes["cke-list-style-type"] = e["list-style-type"]
            } else f = {"·": "disc", o: "circle", "§": "square"}, !e["list-style-type"] &&
            f[b] && (e["list-style-type"] = f[b]);
            g.setListSymbol.removeRedundancies(e, d);
            (c.attributes.style = CKEDITOR.tools.writeCssText(e)) || delete c.attributes.style
        }, setListStart: function (c) {
            for (var b = [], d = 0, e = 0; e < c.children.length; e++) b.push(c.children[e].attributes["cke-symbol"] || "");
            b[0] || d++;
            switch (c.attributes["cke-list-style-type"]) {
                case "lower-roman":
                case "upper-roman":
                    c.attributes.start = g.toArabic(g.getSubsectionSymbol(b[d])) - d;
                    break;
                case "lower-alpha":
                case "upper-alpha":
                    c.attributes.start = g.getSubsectionSymbol(b[d]).replace(/\W/g,
                        "").toLowerCase().charCodeAt(0) - 96 - d;
                    break;
                case "decimal":
                    c.attributes.start = parseInt(g.getSubsectionSymbol(b[d]), 10) - d || 1
            }
            "1" == c.attributes.start && delete c.attributes.start;
            delete c.attributes["cke-list-style-type"]
        }, numbering: {
            toNumber: function (c, b) {
                function d(b) {
                    b = b.toUpperCase();
                    for (var c = 1, d = 1; 0 < b.length; d *= 26) c += "ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(b.charAt(b.length - 1)) * d, b = b.substr(0, b.length - 1);
                    return c
                }

                function e(b) {
                    var c = [[1E3, "M"], [900, "CM"], [500, "D"], [400, "CD"], [100, "C"], [90, "XC"], [50,
                        "L"], [40, "XL"], [10, "X"], [9, "IX"], [5, "V"], [4, "IV"], [1, "I"]];
                    b = b.toUpperCase();
                    for (var d = c.length, a = 0, e = 0; e < d; ++e) for (var g = c[e], u = g[1].length; b.substr(0, u) == g[1]; b = b.substr(u)) a += g[0];
                    return a
                }

                return "decimal" == b ? Number(c) : "upper-roman" == b || "lower-roman" == b ? e(c.toUpperCase()) : "lower-alpha" == b || "upper-alpha" == b ? d(c) : 1
            }, getStyle: function (c) {
                c = c.slice(0, 1);
                var b = {
                    i: "lower-roman",
                    v: "lower-roman",
                    x: "lower-roman",
                    l: "lower-roman",
                    m: "lower-roman",
                    I: "upper-roman",
                    V: "upper-roman",
                    X: "upper-roman",
                    L: "upper-roman",
                    M: "upper-roman"
                }[c];
                b || (b = "decimal", c.match(/[a-z]/) && (b = "lower-alpha"), c.match(/[A-Z]/) && (b = "upper-alpha"));
                return b
            }
        }, getSubsectionSymbol: function (c) {
            return (c.match(/([\da-zA-Z]+).?$/) || ["placeholder", "1"])[1]
        }, setListDir: function (c) {
            var b = 0, d = 0;
            c.forEach(function (c) {
                "li" == c.name && ("rtl" == (c.attributes.dir || c.attributes.DIR || "").toLowerCase() ? d++ : b++)
            }, CKEDITOR.ELEMENT_NODE);
            d > b && (c.attributes.dir = "rtl")
        }, createList: function (c) {
            return (c.attributes["cke-symbol"].match(/([\da-np-zA-NP-Z]).?/) || [])[1] ?
                new CKEDITOR.htmlParser.element("ol") : new CKEDITOR.htmlParser.element("ul")
        }, createLists: function (c) {
            function b(b) {
                return CKEDITOR.tools.array.reduce(b, function (b, a) {
                    if (a.attributes && a.attributes.style) var c = CKEDITOR.tools.parseCssText(a.attributes.style)["margin-left"];
                    return c ? b + parseInt(c, 10) : b
                }, 0)
            }

            var d, e, f, l = g.convertToRealListItems(c);
            if (0 === l.length) return [];
            var k = g.groupLists(l);
            for (c = 0; c < k.length; c++) {
                var a = k[c], h = a[0];
                for (f = 0; f < a.length; f++) if (1 == a[f].attributes["cke-list-level"]) {
                    h = a[f];
                    break
                }
                var h = [g.createList(h)], m = h[0], u = [h[0]];
                m.insertBefore(a[0]);
                for (f = 0; f < a.length; f++) {
                    d = a[f];
                    for (e = d.attributes["cke-list-level"]; e > h.length;) {
                        var v = g.createList(d), x = m.children;
                        0 < x.length ? x[x.length - 1].add(v) : (x = new CKEDITOR.htmlParser.element("li", {style: "list-style-type:none"}), x.add(v), m.add(x));
                        h.push(v);
                        u.push(v);
                        m = v;
                        e == h.length && g.setListSymbol(v, d.attributes["cke-symbol"], e)
                    }
                    for (; e < h.length;) h.pop(), m = h[h.length - 1], e == h.length && g.setListSymbol(m, d.attributes["cke-symbol"], e);
                    d.remove();
                    m.add(d)
                }
                h[0].children.length && (f = h[0].children[0].attributes["cke-symbol"], !f && 1 < h[0].children.length && (f = h[0].children[1].attributes["cke-symbol"]), f && g.setListSymbol(h[0], f));
                for (f = 0; f < u.length; f++) g.setListStart(u[f]);
                for (f = 0; f < a.length; f++) this.determineListItemValue(a[f])
            }
            CKEDITOR.tools.array.forEach(l, function (a) {
                for (var c = [], d = a.parent; d;) "li" === d.name && c.push(d), d = d.parent;
                var c = b(c), e;
                c && (a.attributes = a.attributes || {}, d = CKEDITOR.tools.parseCssText(a.attributes.style), e = d["margin-left"] ||
                    0, (e = Math.max(parseInt(e, 10) - c, 0)) ? d["margin-left"] = e + "px" : delete d["margin-left"], a.attributes.style = CKEDITOR.tools.writeCssText(d))
            });
            return l
        }, cleanup: function (c) {
            var b = ["cke-list-level", "cke-symbol", "cke-list-id", "cke-indentation", "cke-dissolved"], d, e;
            for (d = 0; d < c.length; d++) for (e = 0; e < b.length; e++) delete c[d].attributes[b[e]]
        }, determineListItemValue: function (c) {
            if ("ol" === c.parent.name) {
                var b = this.calculateValue(c), d = c.attributes["cke-symbol"].match(/[a-z0-9]+/gi), e;
                d && (d = d[d.length - 1], e = c.parent.attributes["cke-list-style-type"] ||
                    this.numbering.getStyle(d), d = this.numbering.toNumber(d, e), d !== b && (c.attributes.value = d))
            }
        }, calculateValue: function (c) {
            if (!c.parent) return 1;
            var b = c.parent;
            c = c.getIndex();
            var d = null, e, f, g;
            for (g = c; 0 <= g && null === d; g--) f = b.children[g], f.attributes && void 0 !== f.attributes.value && (e = g, d = parseInt(f.attributes.value, 10));
            null === d && (d = void 0 !== b.attributes.start ? parseInt(b.attributes.start, 10) : 1, e = 0);
            return d + (c - e)
        }, dissolveList: function (c) {
            function b(a) {
                return 50 <= a ? "l" + b(a - 50) : 40 <= a ? "xl" + b(a - 40) : 10 <= a ? "x" +
                    b(a - 10) : 9 == a ? "ix" : 5 <= a ? "v" + b(a - 5) : 4 == a ? "iv" : 1 <= a ? "i" + b(a - 1) : ""
            }

            function d(a, b) {
                function c(b, d) {
                    return b && b.parent ? a(b.parent) ? c(b.parent, d + 1) : c(b.parent, d) : d
                }

                return c(b, 0)
            }

            var e = function (b) {
                return function (a) {
                    return a.name == b
                }
            }, f = function (b) {
                return e("ul")(b) || e("ol")(b)
            }, g = CKEDITOR.tools.array, w = [], a, h;
            c.forEach(function (b) {
                w.push(b)
            }, CKEDITOR.NODE_ELEMENT, !1);
            a = g.filter(w, e("li"));
            var m = g.filter(w, f);
            g.forEach(m, function (a) {
                var c = a.attributes.type, h = parseInt(a.attributes.start, 10) || 1, m = d(f, a) + 1;
                c || (c = n.parseCssText(a.attributes.style)["list-style-type"]);
                g.forEach(g.filter(a.children, e("li")), function (d, e) {
                    var f;
                    switch (c) {
                        case "disc":
                            f = "·";
                            break;
                        case "circle":
                            f = "o";
                            break;
                        case "square":
                            f = "§";
                            break;
                        case "1":
                        case "decimal":
                            f = h + e + ".";
                            break;
                        case "a":
                        case "lower-alpha":
                            f = String.fromCharCode(97 + h - 1 + e) + ".";
                            break;
                        case "A":
                        case "upper-alpha":
                            f = String.fromCharCode(65 + h - 1 + e) + ".";
                            break;
                        case "i":
                        case "lower-roman":
                            f = b(h + e) + ".";
                            break;
                        case "I":
                        case "upper-roman":
                            f = b(h + e).toUpperCase() + ".";
                            break;
                        default:
                            f =
                                "ul" == a.name ? "·" : h + e + "."
                    }
                    d.attributes["cke-symbol"] = f;
                    d.attributes["cke-list-level"] = m
                })
            });
            a = g.reduce(a, function (b, a) {
                var c = a.children[0];
                if (c && c.name && c.attributes.style && c.attributes.style.match(/mso-list:/i)) {
                    k.pushStylesLower(a, {"list-style-type": !0, display: !0});
                    var d = n.parseCssText(c.attributes.style, !0);
                    k.setStyle(a, "mso-list", d["mso-list"], !0);
                    k.setStyle(c, "mso-list", "");
                    delete a["cke-list-level"];
                    (c = d.display ? "display" : d.DISPLAY ? "DISPLAY" : "") && k.setStyle(a, "display", d[c], !0)
                }
                if (1 === a.children.length &&
                    f(a.children[0])) return b;
                a.name = "p";
                a.attributes["cke-dissolved"] = !0;
                b.push(a);
                return b
            }, []);
            for (h = a.length - 1; 0 <= h; h--) a[h].insertAfter(c);
            for (h = m.length - 1; 0 <= h; h--) delete m[h].name
        }, groupLists: function (c) {
            var b, d, e = [[c[0]]], f = e[0];
            d = c[0];
            d.attributes["cke-indentation"] = d.attributes["cke-indentation"] || z(d);
            for (b = 1; b < c.length; b++) {
                d = c[b];
                var l = c[b - 1];
                d.attributes["cke-indentation"] = d.attributes["cke-indentation"] || z(d);
                d.previous !== l && (g.chopDiscontinuousLists(f, e), e.push(f = []));
                f.push(d)
            }
            g.chopDiscontinuousLists(f,
                e);
            return e
        }, chopDiscontinuousLists: function (c, b) {
            for (var d = {}, e = [[]], f, l = 0; l < c.length; l++) {
                var k = d[c[l].attributes["cke-list-level"]], a = this.getListItemInfo(c[l]), h, m;
                k ? (m = k.type.match(/alpha/) && 7 == k.index ? "alpha" : m, m = "o" == c[l].attributes["cke-symbol"] && 14 == k.index ? "alpha" : m, h = g.getSymbolInfo(c[l].attributes["cke-symbol"], m), a = this.getListItemInfo(c[l]), (k.type != h.type || f && a.id != f.id && !this.isAListContinuation(c[l])) && e.push([])) : h = g.getSymbolInfo(c[l].attributes["cke-symbol"]);
                for (f = parseInt(c[l].attributes["cke-list-level"],
                    10) + 1; 20 > f; f++) d[f] && delete d[f];
                d[c[l].attributes["cke-list-level"]] = h;
                e[e.length - 1].push(c[l]);
                f = a
            }
            [].splice.apply(b, [].concat([n.indexOf(b, c), 1], e))
        }, isAListContinuation: function (c) {
            var b = c;
            do if ((b = b.previous) && b.type === CKEDITOR.NODE_ELEMENT) {
                if (void 0 === b.attributes["cke-list-level"]) break;
                if (b.attributes["cke-list-level"] === c.attributes["cke-list-level"]) return b.attributes["cke-list-id"] === c.attributes["cke-list-id"]
            } while (b);
            return !1
        }, toArabic: function (c) {
            return c.match(/[ivxl]/i) ? c.match(/^l/i) ?
                50 + g.toArabic(c.slice(1)) : c.match(/^lx/i) ? 40 + g.toArabic(c.slice(1)) : c.match(/^x/i) ? 10 + g.toArabic(c.slice(1)) : c.match(/^ix/i) ? 9 + g.toArabic(c.slice(2)) : c.match(/^v/i) ? 5 + g.toArabic(c.slice(1)) : c.match(/^iv/i) ? 4 + g.toArabic(c.slice(2)) : c.match(/^i/i) ? 1 + g.toArabic(c.slice(1)) : g.toArabic(c.slice(1)) : 0
        }, getSymbolInfo: function (c, b) {
            var d = c.toUpperCase() == c ? "upper-" : "lower-",
                e = {"·": ["disc", -1], o: ["circle", -2], "§": ["square", -3]};
            if (c in e || b && b.match(/(disc|circle|square)/)) return {index: e[c][1], type: e[c][0]};
            if (c.match(/\d/)) return {index: c ? parseInt(g.getSubsectionSymbol(c), 10) : 0, type: "decimal"};
            c = c.replace(/\W/g, "").toLowerCase();
            return !b && c.match(/[ivxl]+/i) || b && "alpha" != b || "roman" == b ? {
                index: g.toArabic(c),
                type: d + "roman"
            } : c.match(/[a-z]/i) ? {index: c.charCodeAt(0) - 97, type: d + "alpha"} : {index: -1, type: "disc"}
        }, getListItemInfo: function (c) {
            if (void 0 !== c.attributes["cke-list-id"]) return {
                id: c.attributes["cke-list-id"],
                level: c.attributes["cke-list-level"]
            };
            var b = n.parseCssText(c.attributes.style)["mso-list"], d =
                {id: "0", level: "1"};
            b && (b += " ", d.level = b.match(/level(.+?)\s+/)[1], d.id = b.match(/l(\d+?)\s+/)[1]);
            c.attributes["cke-list-level"] = void 0 !== c.attributes["cke-list-level"] ? c.attributes["cke-list-level"] : d.level;
            c.attributes["cke-list-id"] = d.id;
            return d
        }
    };
    g = q.lists;
    q.heuristics = {
        isEdgeListItem: function (c, b) {
            if (!CKEDITOR.env.edge || !c.config.pasteFromWord_heuristicsEdgeList) return !1;
            var d = "";
            b.forEach && b.forEach(function (b) {
                d += b.value
            }, CKEDITOR.NODE_TEXT);
            return d.match(/^(?: |&nbsp;)*\(?[a-zA-Z0-9]+?[\.\)](?: |&nbsp;){2,}/) ?
                !0 : p.isDegenerateListItem(c, b)
        }, cleanupEdgeListItem: function (c) {
            var b = !1;
            c.forEach(function (c) {
                b || (c.value = c.value.replace(/^(?:&nbsp;|[\s])+/, ""), c.value.length && (b = !0))
            }, CKEDITOR.NODE_TEXT)
        }, isDegenerateListItem: function (c, b) {
            return !!b.attributes["cke-list-level"] || b.attributes.style && !b.attributes.style.match(/mso\-list/) && !!b.find(function (c) {
                if (c.type == CKEDITOR.NODE_ELEMENT && b.name.match(/h\d/i) && c.getHtml().match(/^[a-zA-Z0-9]+?[\.\)]$/)) return !0;
                var e = n.parseCssText(c.attributes && c.attributes.style,
                    !0);
                if (!e) return !1;
                var f = e["font-family"] || "";
                return (e.font || e["font-size"] || "").match(/7pt/i) && !!c.previous || f.match(/symbol/i)
            }, !0).length
        }, assignListLevels: function (c, b) {
            if (!b.attributes || void 0 === b.attributes["cke-list-level"]) {
                for (var d = [z(b)], e = [b], f = [], g = CKEDITOR.tools.array, k = g.map; b.next && b.next.attributes && !b.next.attributes["cke-list-level"] && p.isDegenerateListItem(c, b.next);) b = b.next, d.push(z(b)), e.push(b);
                var a = k(d, function (a, b) {
                    return 0 === b ? 0 : a - d[b - 1]
                }), h = this.guessIndentationStep(g.filter(d,
                    function (a) {
                        return 0 !== a
                    })), f = k(d, function (a) {
                    return Math.round(a / h)
                });
                -1 !== g.indexOf(f, 0) && (f = k(f, function (a) {
                    return a + 1
                }));
                g.forEach(e, function (a, b) {
                    a.attributes["cke-list-level"] = f[b]
                });
                return {indents: d, levels: f, diffs: a}
            }
        }, guessIndentationStep: function (c) {
            return c.length ? Math.min.apply(null, c) : null
        }, correctLevelShift: function (c) {
            if (this.isShifted(c)) {
                var b = CKEDITOR.tools.array.filter(c.children, function (b) {
                    return "ul" == b.name || "ol" == b.name
                }), d = CKEDITOR.tools.array.reduce(b, function (b, c) {
                    return (c.children &&
                    1 == c.children.length && p.isShifted(c.children[0]) ? [c] : c.children).concat(b)
                }, []);
                CKEDITOR.tools.array.forEach(b, function (b) {
                    b.remove()
                });
                CKEDITOR.tools.array.forEach(d, function (b) {
                    c.add(b)
                });
                delete c.name
            }
        }, isShifted: function (c) {
            return "li" !== c.name ? !1 : 0 === CKEDITOR.tools.array.filter(c.children, function (b) {
                return b.name && ("ul" == b.name || "ol" == b.name || "p" == b.name && 0 === b.children.length) ? !1 : !0
            }).length
        }
    };
    p = q.heuristics;
    g.setListSymbol.removeRedundancies = function (c, b) {
        (1 === b && "disc" === c["list-style-type"] ||
            "decimal" === c["list-style-type"]) && delete c["list-style-type"]
    };
    CKEDITOR.cleanWord = CKEDITOR.pasteFilters.word = B.createFilter({
        rules: [t.rules, q.rules],
        additionalTransforms: function (c) {
            CKEDITOR.plugins.clipboard.isCustomDataTypesSupported && (c = t.styles.inliner.inline(c).getBody().getHtml());
            return c.replace(/<!\[/g, "\x3c!--[").replace(/\]>/g, "]--\x3e")
        }
    });
    CKEDITOR.config.pasteFromWord_heuristicsEdgeList = !0
})();
